package com.fzy.common.queue.worker;

import java.util.concurrent.ConcurrentLinkedQueue;

public abstract class Worker implements Runnable {

    protected ConcurrentLinkedQueue<Task> taskQueue = null;

    /**
     * 消费者本身不具备消费品的列表，由生产者设置
     *
     * @param taskQueue
     * @author xuhao
     */
    protected abstract void setTaskQueue(ConcurrentLinkedQueue<Task> taskQueue);

    /**
     * 处理函数，由继承者必须实现的展开功能的方法
     *
     * @param input
     * @return
     * @author xuhao
     */
    protected abstract Object handle(Task input);

    @Override
    public void run() {
        while (true) {
            Task input = this.taskQueue.poll();
            if (input == null)
                break;
            try {
                handle(input);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

}
